﻿/******************************************************************************
 * 【本类功能概述】                                 					      *
 *  版权所有（C）2017-20XX，米兔网络                                         *
 *  保留所有权利。                                                            *
 ******************************************************************************
 *  作者 : <hughjk>
 *  创建时间:2019年6月3日 18:59:37
 *  文件描述:存储管理器
 *****************************************************************************/

namespace StorageModels
{
    using System.Collections.Generic;

    public partial class StorageModelSys : Singleton<StorageModelSys>
    {
        private Dictionary<StorageModelType, StorageModel> m_AllModelData = new Dictionary<StorageModelType, StorageModel>();

        private List<StorageModel> m_StrSaveList = new List<StorageModel>();
        public static int ModelBaseKey = 10000;//模型存储键值区间-->可以用来区分一整套存档

        //进游戏缓存Kye
        public void Init()
        {
            Build();
            Load();
        }

        //从文件获取值到内存
        public void Load()
        {
            ModelLoad();
        }

        //模型获取数据
        private void ModelLoad()
        {
            //var e = m_AllModelData.GetEnumerator();
            //while (e.MoveNext())
            //{
            //    var cur = e.Current;
            //    string zkey = ((int)cur.Key + ModelBaseKey).toString();
            //    cur.Value.BuildKey(zkey);
            //    if (GameEntry.Setting.GetInt(zkey) != 2)
            //    {
            //        GameEntry.Setting.SetInt(zkey, 2);
            //        cur.Value.Init();
            //    }
            //    cur.Value.Load();
            //}
        }

        //预备存储
        public void PrepareSave(StorageModel types)
        {
            if (!m_StrSaveList.Contains(types))
            {
                m_StrSaveList.Add(types);
            }
        }

        private void ModelSaveWrite()
        {
            for (int i = 0; i < m_StrSaveList.Count; i++)
            {
                try
                {
                    m_StrSaveList[i].Write();
                }
                catch (System.Exception ex)
                {
                    debug.log(debug.Level.error_3, ex);
                }
            }
            m_StrSaveList.Clear();
        }

        //进行写文件存储
        public void SaveWrite()
        {
            ModelSaveWrite();
        }

        //获取存储模型
        public T GetModelData<T>(StorageModelType types) where T : StorageModel
        {
            return m_AllModelData[types] as T;
        }
    }
}